/*!
 * @file point2f.hh
 * @brief Klasa punktu [2 floaty]
 */

#ifndef __ENGINE_BASIC_POINT2F_HH
#define __ENGINE_BASIC_POINT2F_HH

#include <cmath>
#include <iostream>

/*!
 * @brief Punkt w przestrzeni dwóch wymiarów.
 */
class point2f {
public:
	/*!
	 * @brief Konstruktor. Tworzy punkt (0,0)
	 * @return Obiekt.
	 */
	point2f();

	/*!
	 * @brief Konstrukotr. Tworzy punkt (x,y)
	 * @param x Współrzędna
	 * @param y Współrzędna
	 * @return Obiekt
	 */
	point2f(int x, int y);

	/*!
	 * @brief Normalizacja punktu.
	 */
	void normalize();

	/*!
	 * @brief Długość/Odległość od punktu (0,0)
	 */
	float length();

	/*!
	 * @brief Współrzędna pierwsza.
	 */
	float x;

	/*!
	 * @brief Współrzędna druga.
	 */
	float y;

private:
};

/*!
 * @brief Wypisywanie punktu
 * @param out Strumień wyjściowy
 * @param val Punkt
 * @return Strumień wyjściowy
 */
std::ostream & operator <<(std::ostream & out, point2f & val);

/*!
 * @brief Dodawanie punktów
 * @param p1 Punkt 1.
 * @param p2 Punkt 2.
 * @return Punkt stanowiący sumę.
 */
point2f operator +(point2f p1, point2f p2);

/*!
 * @brief Odejmowanie punktów
 * @param p1 Pierwszy punkt
 * @param p2 Drugi punkt
 * @return Punkt stanowiący różnicę.
 */
point2f operator -(point2f p1, point2f p2);

/*!
 * @brief Zmniejszanie długości wektora
 * @param v Wektor
 * @param what Przez ile podzielić
 * @return Zmniejszony wektor [punkt]
 */
point2f operator /(point2f v, float what);

#else
class point2f;
#endif
